package com.aasa.siccosap.dao;

import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.sql.DataSource;

import oracle.jdbc.OracleTypes;

import org.apache.log4j.Logger;

import com.aasa.siccosap.bean.ClienteBean;
import com.aasa.siccosap.bean.ObraBean;
import com.aasa.siccosap.bean.ProductoBean;
import com.aasa.siccosap.bean.TipoDocumentoBean;
import com.aasa.siccosap.util.Constantes;


public class ProductoDAO extends accesoDao{
	static Logger logger = Logger.getLogger("ProductoDAO.class");
	public ProductoDAO()	throws accesoDaoException {
		super();
	}
	
	public ProductoDAO(DataSource dataSource) {
		super(dataSource);
	}

	public ArrayList<ProductoBean> consultarProducto(String codigoCliente, String codigoProducto,
			String nombreProducto) {
		ResultSet rs = null;
        this.av_message = null;
        this.storedProcedure = "begin CONSULTA_REIMPRESION_PKG.P_CONSULTA_PRODUCTO(?,?,?,?,?); end;";
        ArrayList<ProductoBean> consultaProducto = new ArrayList<ProductoBean>();
        try{
                this.conn = dataSource.getConnection();
                this.stmt = this.conn.prepareCall(storedProcedure);
                configuraParametrosConsultaProducto(codigoCliente, codigoProducto, nombreProducto);
                this.stmt.execute();
                this.av_message = (String)stmt.getObject(1);
                if(this.av_message.trim().toUpperCase().endsWith(Constantes.NO_ERRORS)){
                        rs = (ResultSet)stmt.getObject(2);
                        while(rs.next()){
                                ProductoBean detalleProducto = creaRegistroConsultaProducto(rs);
                                consultaProducto.add(detalleProducto);
                        }
                }else{
                    return null;
                }
                
                
        }catch (Exception e){
                e.printStackTrace();
                return null;
        }finally{
        		close(this.conn, rs, stmt);
        }
        return consultaProducto;
	}

	private CallableStatement configuraParametrosConsultaProducto(String codigoCliente, String codigoProducto,
			String nombreProducto)
    throws SQLException{
    	stmt.registerOutParameter(1, OracleTypes.VARCHAR);               
        stmt.registerOutParameter(2, OracleTypes.CURSOR);
        stmt.setString(3, codigoProducto);
        stmt.setString(4, nombreProducto);
        stmt.setString(5, codigoCliente);
        return(stmt);          
    }
	
	private ProductoBean creaRegistroConsultaProducto(ResultSet rs) throws SQLException {
		ProductoBean bean = new ProductoBean();
        bean.setStrPv_numProducto(rs.getString("cod_pro"));
        bean.setStrPv_nomProducto(rs.getString("des_abv"));
        bean.setStrPv_codCli(rs.getString("cod_cli"));
        return bean;
	}
	
	public String obtenNombreProducto(String strA_codigo) {
		av_message = null;
        storedProcedure = "begin SICCOSPK_PROYECTO.SICCOSSP_NOMBRE_PRODUCTO(?,?,?); end;";
        
        String strL_nombreProducto = null;
        
        try{
                conn = dataSource.getConnection();
                stmt = conn.prepareCall(storedProcedure);
                              
                configuraParametrosTraerNombreProductoPorCodigo(strA_codigo);
                
                stmt.execute();

                av_message = (String)stmt.getObject(1);
                	
                if(av_message.trim().toUpperCase().endsWith(Constantes.NO_ERRORS)){                	
                	strL_nombreProducto = (String)stmt.getObject(3);                        
                }else{
                    return null;
                }
                
        }catch (Exception e){
                e.printStackTrace();
                return null;
        }finally{
        		close(conn, null, stmt);
        }
		
		return strL_nombreProducto;
	}
	
	private void configuraParametrosTraerNombreProductoPorCodigo(String codigo) throws SQLException {
		stmt.registerOutParameter(1, OracleTypes.VARCHAR);
		stmt.setString(2, codigo);
		stmt.registerOutParameter(3, OracleTypes.VARCHAR);
	}
}
